﻿#region Header
// Copyright 2007-2011, Jerónimo Milea
// 
// This file is part of NetJsWire.
// 
//     NetJsWire is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     NetJsWire is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
// 
//     You should have received a copy of the GNU General Public License
//     along with NetJsWire.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System.CodeDom;
using System.ComponentModel.Design.Serialization;
using NetJsWire.Lite.Widgets;
using NetJsWire.Lite.Widgets.UI;

namespace NetJsWire.Lite.Serializers
{
    public class ListenersSerializer : CodeDomSerializer
    {
        public override object Deserialize( IDesignerSerializationManager manager, object codeObject )
        {
            // This is how we associate the component with the serializer.

            CodeDomSerializer baseClassSerializer = ( CodeDomSerializer ) manager.
            GetSerializer( typeof( ListenersCollection ).BaseType, typeof( CodeDomSerializer ) );

            /* This is the simplest case, in which the class just calls the base class
              to do the work. */

            return baseClassSerializer.Deserialize( manager, codeObject );
        }

        public override object Serialize( IDesignerSerializationManager manager, object value )
        {
            /* Associate the component with the serializer in the same manner as with
              Deserialize */

            CodeDomSerializer baseClassSerializer = ( CodeDomSerializer ) manager.
                GetSerializer( typeof( ListenersCollection ).BaseType, typeof( CodeDomSerializer ) );

            object codeObject = baseClassSerializer.Serialize( manager, value );

            /* Anything could be in the codeObject.  This sample operates on a
              CodeStatementCollection. */

            if ( codeObject is CodeStatementCollection )
            {
                CodeStatementCollection statements = ( CodeStatementCollection ) codeObject;

                //// The code statement collection is valid, so add a comment.

                //string commentText = "This comment was added to this object by a custom serializer.";
                //CodeCommentStatement comment = new CodeCommentStatement( commentText );
                //statements.Insert( 0, comment );
            }
            return codeObject;
        }

    }
}
